/*
Date:20210519 0:29AM
key:当初华为这题应该就是不想让我过面试。
    首先三个循环控制四段(起点终点确定),每个字符串转成数组判断一些条件即可
*/
class Solution {
public:
    string tra_to_s(string&s,int l,int r)
    {
        string s1="";
        for(int i=l;i<r;i++)
        {
            s1+=s[i];
        }
        return s1;
    }
    bool check(string&s)
    {
        if(s.size()>3||s.size()==0){return 0;}
        else
        {
            if(s[0]=='0'&&s.size()!=1){return 0;}
            else
            {
                if(stoi(s)>255){return 0;}
                else{return 1;}
            }
        }
    }

    vector<string> restoreIpAddresses(string s) 
    {
        vector<string>v1;
        if(s.size()<4||s.size()>12){return v1;}
        int n=s.size();
        for(int i=0;i<4;i++)
        {
            
            for(int j=i;j<i+4;j++)
            {
                
                for(int g=j;g<n;g++)
                {

                        string s1=tra_to_s(s,0,i);
                        
                        string s2=tra_to_s(s,i,j);
                        string s3=tra_to_s(s,j,g);
                        string s4=tra_to_s(s,g,n);
                        if(check(s1)&&check(s2)&&check(s3)&&check(s4))
                        {
                            if(s1.size()+s2.size()+s3.size()+s4.size()==s.size())
                            {
                                v1.push_back(s1+'.'+s2+'.'+s3+'.'+s4);
                            }
                            
                        
                    }
                }
            }
        }
        return v1;
    }
};